#define _GNU_SOURCE
#include "daemon_runner.h"
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <signal.h>
#include "daemon_sub_process.h"
#include <stdlib.h>

static  int is_running = 1;
static  sub_process_t *sub_process_list[2];
void daemon_runner_stop(int sig)
{
    is_running = 0;
}

/**
 *  @brief  启动守护进程 
 */
int daemon_runner_start(void)
{
    //0  设定为守护进程 后台运行 无控制台
    daemon(0, 1);
    // 1  重定向日志信息
    close(STDOUT_FILENO);
    close(STDERR_FILENO);
    open("gateway.log", O_CREAT|O_RDWR, 0666);
    open("gateway.err", O_CREAT|O_RDWR, 0666);
    // 2   接收 结束信号
    signal(SIGTERM, daemon_runner_stop);


    //3 初始化子进程 
    sub_process_list[0] =daemon_sub_process_init("app");
    sub_process_list[1] =daemon_sub_process_init("ota");


    //2 持续不断地检查或启动 子进程 
    while(is_running)
    {
        for (size_t i = 0; i < 2; i++)
        {
            daemon_sub_process_check_and_start(sub_process_list[i]);
        }

        sleep(3);
    }

    //3 如果结束到退出信号 ， 则连带子进程一起 退出 
    for(size_t i = 0; i < 2; i++)
    {
        daemon_sub_process_stop(sub_process_list[i]);
        free(sub_process_list[i]);
    }
    printf("daemon exit\n");

    return 0;
}